package com.tjn.arrays_;

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * @author 陶镓妮
 * @version 1.0
 */
public class ArraysMethods {
    public static void main(String[] args) {
        Integer[] integers = {1, 2, 3, 4, 5};
        //传统遍历数组方法
        for (int i = 0; i < integers.length; i++) {
            System.out.println(integers[i]);
        }
        //1.快捷遍历数组方法，使用Arrays.toString方法
        System.out.println(Arrays.toString(integers));

        //2.Arrays.sort: 对数组进行排序
        Integer[] integers1 = {1, -2, 3, 9, 0};
        Arrays.sort(integers1);
        System.out.println("=====排序后=====");
        System.out.println(Arrays.toString(integers1));
        //sort重载，可以通过接口Comparator指定排序规则
        Arrays.sort(integers1, new Comparator() {//两个参数，1.需要排序的数组，2.匿名内部类（实现compare方法）
            @Override
            public int compare(Object o1, Object o2) {
                Integer i1 = (Integer) o1;
                Integer i2 = (Integer) o2;
                return i1 - i2;//升序,这个地方返回的值是大于零还是小于零，会影响排序结果
                //return i2 - i1;//降序
            }
        });

        //3.Arrays.binarySearch: 对数组进行二分查找，要求数组必须是排好序的
        Integer[] integers2 = {1, 2, 5, 7, 9};
        int index = Arrays.binarySearch(integers2,5);//查找5这个元素在数组中的索引，如果找不到，则返回负数
        //如果不存在钙元素则返回return -（low + 1）;low代表应该插入的索引位置,
        // 比如如果输入3，数组里没有，按照数组顺序要插入3这个元素，应该插在索引为2的位置，所以返回-3
        System.out.println(index);

        //4.Arrays.CopyOf: 复制数组
        //下面代码的意思就是从integers2数组中复制4个元素，复制到integers3数组中
        //如果复制的元素个数大于数组的长度，就在新数组后面增加null
        //如果复制的元素个数为负数，则抛出NegativeArraySizeException异常
        Integer [] integers3 = Arrays.copyOf(integers2, 4);
        System.out.println("=====复制数组=====");
        System.out.println(Arrays.toString(integers3));

        //5.Arrays.fill: 用指定元素填充数组
        Integer[] integers4 = new Integer[]{1, 2, 3, 4, 5};
        //以下代码的意思是用6去替换数组中的所有元素
        Arrays.fill(integers4, 6);
        System.out.println("=====填充数组=====");
        System.out.println(Arrays.toString(integers4));

        //6.Arrays.equals: 比较两个数组是否相等
        System.out.println("=====比较数组=====");
        //如果这两个数组元素一样，就返回true，如果不完全一样就返回false
        System.out.println(Arrays.equals(integers2, integers4));

        //7.Arrays.asList: 把数组转换成List
        System.out.println("=====数组转List=====");
        //会将(3, 4, 8, 5, 9, 1)数据转换成List集合
        List list = Arrays.asList(3, 4, 8, 5, 9, 1);
        System.out.println(list);
    }
}
